/*
 * @Author: wwssaabb
 * @Date: 2021-06-08 15:31:26
 * @LastEditTime: 2021-07-06 11:27:31
 * @FilePath: \demo\koa2_demo\demo\中间件特点_demo\app.js
 */

/**
 *  中间件的特点
 * 1.Koa对象通过use方法加入一个中间件
 * 2.一个中间件就是一个函数 
 * 3.中间件的执行顺序符合洋葱模型
 */

const Koa=require('koa')
const app=new Koa()

//第一层中间件
app.use(async (ctx,next)=>{
  console.log('我是第一层中间件 next前')
  await next()
  console.log('我是第一层中间件 next后')

  //ctx.response.body='我是第一层中间件'
})

//第二层中间件
app.use(async (ctx,next)=>{
  console.log('我是第二层中间件 next前')
  await next()
  console.log('我是第二层中间件 next后')
  ctx.response.body='我是第二层中间件'
  //ctx.response.body='我是第二层中间件'
})

//第三层中间件
app.use(async (ctx,next)=>{
  console.log('我是第三层中间件')
  //ctx.response.body='我是第三层中间件'
})

app.listen(3000)

//结果输出顺序为
//我是第一层中间件 next前
//我是第二层中间件 next前
//我是第三层中间件
//我是第二层中间件 next后
//我是第一层中间件 next后